<template>
	<!-- sku组件 -->
	<vk-data-goods-sku-popup v-model="skuShow" 
	:localdata="localdata" 
	:mode="mode"
	 add-cart-background-color="#FFA868"
	 buy-now-background-color="#27ba9b"
	 ref="skuPopupRef"
	 :actived-style="{
		 color: '#27BA9B',
		 borderColor: '#27BA9B',
		 backgroundColor: '#E9F8F5'
	 }"
	 @add-cart="onAddCart"
	 @buy-now="onBuyNow"
	 />
	<scroll-view scroll-y class="viewport">
		<!-- 基本信息 -->
		<view class="goods">
			<!-- 商品主图 -->
			<view class="preview">
				<swiper circular style="height: 750rpx;" @change="onChange">
					<swiper-item v-for="item in goods?.imageUrl" :key="item">
						<image @tap="onTapImage(item)" mode="aspectFill" :src="item"
							style="width: 750rpx; height: 750rpx;" />
					</swiper-item>
				</swiper>
				<view class="indicator">
					<text class="current">{{currentIndex+1}}</text>
					<text class="split">/</text>
					<text class="total">{{goods?.imageUrl.length}}</text>
				</view>
			</view>

			<!-- 商品简介 -->
			<view class="meta">
				<view class="price">
					<text class="symbol">¥</text>
					<text class="number">{{goods?.price.toFixed(2)}}</text>
				</view>
				<view class="name ellipsis">{{goods?.name}}</view>
				<view class="desc"> {{goods?.subName}} </view>
			</view>

			<!-- 操作面板 -->
			<view class="action">
				<view class="item arrow">
					<text class="label">选择</text>
					<text class="text ellipsis" @tap="openSkuPopup(1)"> {{selectArrText}} </text>
					<!-- <uni-icons type="right" size="20"></uni-icons> -->
				</view>
				<view @tap="openPopup('address')" class="item arrow">
					<text class="label">送至</text>
					<text class="text ellipsis"> 请选择收获地址 </text>
					<!-- <uni-icons type="right" size="20"></uni-icons> -->
				</view>
				<view @tap="openPopup('service')" class="item arrow">
					<text class="label">服务</text>
					<text class="text ellipsis"> 无忧退 快速退款 免费包邮 </text>
					<!-- <uni-icons type="right" size="20"></uni-icons> -->
				</view>
			</view>
		</view>

		<!-- 商品详情 -->
		<view class="detail panel">
			<view class="title">
				<text>详情</text>
			</view>
			<view class="content">
				<view class="properties">
					<!-- 属性详情 -->
					<view class="item">
						<text class="label">属性名</text>
						<text class="value">属性值</text>
					</view>
					<view class="item">
						<text class="label">属性名</text>
						<text class="value">属性值</text>
					</view>
				</view>
				<!-- 图片详情 -->
				<view class="details">
					<rich-text :nodes="content"></rich-text>
				</view>
			</view>
		</view>

		<!-- 同类推荐 -->
		<view class="similar panel">
			<view class="title">
				<text>同类推荐</text>
			</view>
			<view class="content">
				<JiuGoodsItem :category="query" />
			</view>
		</view>
	</scroll-view>

	<!-- 用户操作 -->
	<view class="toolbar" :style="{ paddingBottom: safeAreaInsets?.bottom + 'px' }">

		<view class="icons">
			<button class="icons-button"><text class="icon-heart"></text>收藏</button>
			<button class="icons-button" open-type="contact">
				<text class="icon-handset"></text>客服
			</button>
			<navigator class="icons-button" url="/pages/cart/cart2">
				<text class="icon-cart"></text>购物车
			</navigator>
		</view>
		<view class="buttons">
			<view class="addcart" @tap="openSkuPopup(2)"> 加入购物车 </view>
			<view class="payment" @tap="openSkuPopup(3)"> 立即购买 </view>
		</view>
	</view>
	<!-- 弹出层 -->
	<uni-popup ref="popup" type="bottom" background-color="#fff">
		<ServicePanel @close="popup?.close()" v-if="popupName==='service'" />
		<AddressPanel @close="popup?.close()" v-if="popupName==='address'" />
	</uni-popup>
</template>
<script setup lang="ts">
	import { computed, ref } from 'vue';
	import { onLoad } from '@dcloudio/uni-app';
	import type { GoodsVo, SkusVo, specsVo } from '@/api/goods/types.ts';
	import { getGoodDetailApi } from '@/api/goods/index.ts'
	import ServicePanel from './components/ServicePanel.vue'
	import AddressPanel from './components/AddressPanel.vue'
	import type {SkuPopupEvent} from '@/api/goods/skuTypes.ts'
	import {addCartApi} from '@/api/cart/index.ts'


	// 获取屏幕边界到安全区域距离
	const { safeAreaInsets } = uni.getSystemInfoSync()
	const goods = ref<GoodsVo>()
	const content = ref()
	const query = ref("1792067797187043329");
	const currentIndex = ref(0);
	const skuShow = ref(false)
	/* sku数据 */
	const localdata = ref({})
	const mode = ref(2) //底部加入购物车/立即购买按钮显示
	//打开sku弹窗修改按钮样式
	const openSkuPopup =(val: number)=>{
		//显示sku组件
		skuShow.value = true
		//修改按钮模式
		mode.value = val
	}
	
	//地址/服务弹出层
	const popup = ref<{
		open : (type ?: UniHelper.UniPopupType) => void
		close : () => void
	}>()
	//弹出层条件渲染
	const popupName = ref<'address' | 'service'>()
	const openPopup = (name : typeof popupName.value) => {
		//修改弹出层名称
		popupName.value = name;
		popup.value?.open();
	}

	const props = defineProps<{ id : string }>()

	const getDetails = async () => {
		const res : any = await getGoodDetailApi(props.id)
		console.log(res.data)
		goods.value = res.data
		//设置富文本所有图片的宽度
		content.value = res.data?.goodsDetails.content.replace(/\<img/g, "<img style='width:100%;height:auto;'")
		//传给子组件商品列表的参数
		//sku组件参数设置
		localdata.value = {
			_id: res.data.id,
			name: res.data.name,
			goods_thumb: res.data.imageUrl[0],
			spec_list: res.data.specs.map((v: specsVo) => {
				return {
					name: v.name,
					list: v.specValue,
				}
			}),
			sku_list: res.data.skus.map((v: SkusVo) => {
				return {
					_id: v.id,
					goods_id: res.data.id,
					goods_name: res.data.name,
					image: v.imgUrl,
					price: v.price * 100,
					stock: v.stock,
					sku_name_arr:v.specs.map((vv: any)=>vv.valueName)
				}
			})

		}


	}

	onLoad(() => {
		getDetails()
	})
	/* 获取swiper事件 */
	const onChange : UniHelper.SwiperOnChange = (e) => {
		currentIndex.value = e.detail.current;
	}
	/* 图片放大 */
	const onTapImage = (url : string) => {
		uni.previewImage({
			current: url,
			urls: goods.value!.imageUrl
		})
	}
	/* 加入购物车 */
	const onAddCart =async (ev: SkuPopupEvent) => {
		console.log(ev)
		const {code} = await addCartApi({skuId: ev._id, count: ev.buy_num})
		if(code ===200){
			uni.showToast({
				title:"添加成功"
			})
			skuShow.value = false;
			
		}
	}
	/* sku实例 */
	const skuPopupRef = ref< SkuPopupEvent >()
	
	const selectArrText = computed(()=>{
		return skuPopupRef.value?.selectArr?.join(' ').trim() || "请选择商品规格"
	})
	/* 立即购买 */
	const onBuyNow=(ev:SkuPopupEvent)=>{
		uni.navigateTo({
			url:`/pagesOrder/create/create?skuId=${ev._id}&count=${ev.buy_num}`
		})
	}
</script>
<style lang="scss" scoped>
	page {
		height: 100%;
		// overflow: hidden;
		display: flex;
		flex-direction: column;
	}

	/* 商品信息 */
	.goods {
		background-color: #fff;

		.preview {
			background-color: #ddd;
			height: 750rpx;
			width: 750rpx;
			overflow: hidden;
			position: relative;

			//这里怎么宽度有效，高度无效呢？

			.goods-image {
				width: 100%;
				height: 100%;
				object-fit: cover;
			}

			.indicator {
				height: 40rpx;
				padding: 0 24rpx;
				line-height: 40rpx;
				border-radius: 30rpx;
				color: #fff;
				font-family: Arial, Helvetica, sans-serif;
				background-color: rgba(0, 0, 0, 0.3);
				position: absolute;
				bottom: 30rpx;
				right: 30rpx;

				.current {
					font-size: 26rpx;
				}

				.split {
					font-size: 24rpx;
					margin: 0 1rpx 0 2rpx;
				}

				.total {
					font-size: 24rpx;
				}
			}
		}

		.meta {
			position: relative;
			border-bottom: 1rpx solid #eaeaea;

			.price {
				height: 130rpx;
				padding: 25rpx 30rpx 0;
				color: #fff;
				font-size: 34rpx;
				box-sizing: border-box;
				background-color: #35c8a9;
			}

			.number {
				font-size: 56rpx;
			}

			.brand {
				width: 160rpx;
				height: 80rpx;
				overflow: hidden;
				position: absolute;
				top: 26rpx;
				right: 30rpx;
			}

			.name {
				max-height: 88rpx;
				line-height: 1.4;
				margin: 20rpx;
				font-size: 32rpx;
				color: #333;
			}

			.desc {
				line-height: 1;
				padding: 0 20rpx 30rpx;
				font-size: 24rpx;
				color: #cf4444;
			}
		}

		.action {
			padding-left: 20rpx;

			.item {
				height: 90rpx;
				padding-right: 60rpx;
				border-bottom: 1rpx solid #eaeaea;
				font-size: 26rpx;
				color: #333;
				position: relative;
				display: flex;
				align-items: center;

				&:last-child {
					border-bottom: 0 none;
				}
			}

			.label {
				width: 60rpx;
				color: #898b94;
				margin: 0 16rpx 0 10rpx;
			}

			.text {
				flex: 1;
				-webkit-line-clamp: 1;
			}
		}
	}

	.viewport {
		background-color: #f4f4f4;
	}

	.panel {
		margin-top: 20rpx;
		background-color: #fff;

		.title {
			display: flex;
			justify-content: space-between;
			align-items: center;
			height: 90rpx;
			line-height: 1;
			padding: 30rpx 60rpx 30rpx 6rpx;
			position: relative;

			text {
				padding-left: 10rpx;
				font-size: 28rpx;
				color: #333;
				font-weight: 600;
				border-left: 4rpx solid #27ba9b;
			}

			navigator {
				font-size: 24rpx;
				color: #666;
			}
		}
	}

	.arrow {
		&::after {
			position: absolute;
			top: 50%;
			right: 30rpx;
			content: '\e6c2';
			color: #ccc;
			font-family: 'erabbit' !important;
			font-size: 32rpx;
			transform: translateY(-50%);
		}
	}



	/* 商品详情 */
	.detail {
		padding-left: 20rpx;

		.content {
			margin-left: -20rpx;

			.image {
				width: 100%;
			}
		}

		.properties {
			padding: 0 20rpx;
			margin-bottom: 30rpx;

			.item {
				display: flex;
				line-height: 2;
				padding: 10rpx;
				font-size: 26rpx;
				color: #333;
				border-bottom: 1rpx dashed #ccc;
			}

			.label {
				width: 200rpx;
			}

			.value {
				flex: 1;
			}
		}
	}

	/* 同类推荐 */
	.similar {
		.content {
			padding: 0 20rpx 20rpx;
			background-color: #f4f4f4;
			display: flex;
			flex-wrap: wrap;

			.goods {
				width: 340rpx;
				padding: 24rpx 20rpx 20rpx;
				margin: 20rpx 7rpx;
				border-radius: 10rpx;
				background-color: #fff;
			}

			.image {
				width: 300rpx;
				height: 260rpx;
			}

			.name {
				height: 80rpx;
				margin: 10rpx 0;
				font-size: 26rpx;
				color: #262626;
			}

			.price {
				line-height: 1;
				font-size: 20rpx;
				color: #cf4444;
			}

			.number {
				font-size: 26rpx;
				margin-left: 2rpx;
			}
		}

		navigator {
			&:nth-child(even) {
				margin-right: 0;
			}
		}
	}

	/* 底部工具栏 */
	.toolbar {
		position: fixed;
		left: 0;
		right: 0;
		bottom: calc((var(--window-bottom)));
		z-index: 1;
		background-color: #fff;
		height: 100rpx;
		padding: 0 20rpx;
		border-top: 1rpx solid #eaeaea;
		display: flex;
		justify-content: space-between;
		align-items: center;
		box-sizing: content-box;

		.buttons {
			display: flex;

			&>view {
				width: 220rpx;
				text-align: center;
				line-height: 72rpx;
				font-size: 26rpx;
				color: #fff;
				border-radius: 72rpx;
			}

			.addcart {
				background-color: #ffa868;
			}
		
			.payment {
				background-color: #27ba9b;
				margin-left: 20rpx;
			}
		}

		.icons {
			padding-right: 20rpx;
			display: flex;
			align-items: center;
			flex: 1;

			// 兼容 H5 端和 App 端的导航链接样式
			.navigator-wrap,
			.icons-button {
				flex: 1;
				text-align: center;
				line-height: 1.4;
				padding: 0;
				margin: 0;
				border-radius: 0;
				font-size: 20rpx;
				color: #333;
				background-color: #fff;

				&::after {
					border: none;
				}
			}

			text {
				display: block;
				font-size: 34rpx;
			}
		}
	}
</style>